package com.shujia.wyh.day14;

/*
    public class ObjectClass Object是类Object结构的根。
    每个class都有Object作为超类。
    所有对象（包括数组）都实现了这个类的方法。
    public String toString() 返回对象的字符串表示形式。
    换句话说，这个方法返回一个等于下列值的字符串：
    getClass().getName() + '@' + Integer.toHexString(hashCode())

    public final 类<?> getClass()返回此Object的运行时类。
    返回的类对象是被表示类的static synchronized方法锁定的对象。

    public int hashCode()返回对象的哈希码值。
    通过默认的哈希函数将地址值计算出一个int类型的数值，简单记忆：这个结果值其实就代表一个地址值。
    支持这种方法是为了散列表，如HashMap提供的那样 。

    Integer类中有一个方法：toHexString(int i)
    public static String toHexString(int i) 返回整数参数的字符串表示形式，作为16位中的无符号整数。


 */
public class ObjectDemo1 {
    public static void main(String[] args) {
        Dog d1 = new Dog("小白", 2);
        String s1 = d1.toString();
//        System.out.println(s1);
        //com.shujia.wyh.day14.Dog@4554617c
        //getClass().getName() + '@' + Integer.toHexString(hashCode())
        //this.getClass().getName() + "@" + Integer.toHexString(this.hashCode())
        Dog d2 = new Dog("小花", 3);
//        System.out.println(d1.hashCode()); //1163157884
//        System.out.println(d2.hashCode()); //1956725890
        System.out.println(s1);
        System.out.println(d1.getClass().getName()+"@"+Integer.toHexString(d1.hashCode()));
        //正常开发情况下，我们调用toString()更多的情况拿到地址值对我们来说是没有任何意义的
        //我们更希望想要看到的是该对象的成员变量的值
        //那怎么去做呢？
        //现在看到的是地址值的原因是调用的是Object类中的toString()方法，而Object类中的toString()方法就是
        //打印一个地址值
        //要想实现我们打印对象成员变量值的需求，就可以在子类中进行重写。
        //不需要手动写出，自动生成即可



    }
}
